The Internet has become an important conduit for transmission and distribution of data (text, code, image, video, audio, or mixed) and software. Users connect to the backbone with broadly divergent levels of performance, ranging from 14.4 Kb/s to more than 45 Mb/s. Moreover, Transmission Control Protocol/Internet Protocol (TCP/IP) has become a widely implemented standard communication protocol in Internet/Intranet technology, enabling broad heterogeneity between clients, servers, and the communications systems coupling them. Internet Protocol (IP) is the network layer protocol and Transmission Control Protocol (TCP) is the transport layer protocol. At the network level, IP provides a “datagram” delivery service. By contrast, TCP builds a transport level service over the datagram service to provide guaranteed, sequential delivery of a byte stream between two IP hosts.
TCP flow control mechanisms operate exclusively at the end stations to limit the rate at which TCP endpoints emit data. However, TCP lacks explicit data rate control. The basic flow control mechanism is a “sliding window”, superimposed on a range of bytes beyond the last explicitly acknowledged byte. The sliding window limits the maximum number of sequential bytes between the byte most recently sent from the server to the earliest byte for which a receipt acknowledgment has not yet been received from the client. This sliding operation limits the amount of unacknowledged transmissible data that a TCP endpoint can emit. A variety of algorithms automatically re-send packets and slowly restart data transmission when the sliding window limit is exceeded. Thus, if the link between the server and client is shut down in the middle of transmission of a data collection, the server will stop sending packets within one sliding window of the last packet acknowledged by the client. This use of a sliding window inherently limits the bandwidth of a data transfer through the network.
TCP/IP is a connection-oriented reliable communications protocol that strictly enforces reliable data transfer such that loss of a single TCP frame can block delivery of all subsequent data in the TCP stream until the lost TCP frame is delivered. However, not all client applications require the strict sequence and reliable delivery provided by TCP, especially since this service comes at a cost to bandwidth. For example, video or image based applications do not require strictly reliable data delivery. In such applications, if certain parts of the data stream are lost, the video/image can still be rendered effectively. Thus, the application is willing to tolerate some data loss in some cases if performance can be improved overall. However, TCP will automatically decrease bandwidth available to the application as it enforces the strict reliability.
One approach to avoid the strict reliability requirements of TCP is utilization of an unreliable transport such as User Datagram Protocol (UDP). UDP is a protocol, which defines a connectionless datagram service. A transport layer process or system implementing UDP may produce self-contained data packets, which include destination routing information. To use this approach, client applications must implement their own partial-reliability in layers above the UDP transport layer. However, an application's use of its own partial-reliability layer on top of the UDP transport layer tends to make the application very complex since it must insert its own headers in packets to order and sequence the packets.
Another approach has been to use a protocol like Stream Control Transmission Protocol (SCTP) that provides both a reliable and a partially-reliable data stream within the same connection. However, using SCTP involves changing both the server and the client-side applications to accommodate this unique protocol. Such a change to the server and client-side applications involves rewriting entire applications, which is not economical or always feasible.
It can be seen that there is a need for a communications protocol that provides quasi-reliable data transport, but that reduces the cost and complexity seen in previous solutions. It would be preferable for such a protocol to be easily incorporated into existing networks and to be dynamically controlled based on the data transfer reliability requirements of the client application.